/*
 * GUIConexao.java
 *
 * Created on 22 de Agosto de 2007, 18:30
 */

package codebreaker.cliente.conexao.gui;

import codebreaker.cliente.Main;
import codebreaker.cliente.conexao.ConexaoServidor;
import codebreaker.cliente.conexao.Servidor;
import codebreaker.cliente.sala.gui.GUISala;
import codebreaker.commom.Jogador;
import codebreaker.protocolo.RespostaConexao;
import javax.swing.JOptionPane;

/**
 *
 * @author  rodrigo
 */
public class GUIConexao extends javax.swing.JFrame {
    
    private ConexaoServidor conexaoServidor;
    
    /** Creates new form GUIConexao */
    public GUIConexao() {
	
	initComponents();
	
	/* Carrega lista de servidores */
	conexaoServidor = new ConexaoServidor("serverlist.txt");
	listServidores.setListData(conexaoServidor.getServidores());
	listServidores.setCellRenderer(new ListaServidorRenderer());
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Código Gerado ">//GEN-BEGIN:initComponents
    private void initComponents() {
        buttonConectar = new javax.swing.JButton();
        panelApelido = new javax.swing.JPanel();
        textApelido = new javax.swing.JTextField();
        panelListaServidores = new javax.swing.JPanel();
        scrollPaneServidores = new javax.swing.JScrollPane();
        listServidores = new javax.swing.JList();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Code Breaker - Conectar a servidor");
        setName("frameConexao");
        buttonConectar.setText("Conectar");
        buttonConectar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buttonConectarActionPerformed(evt);
            }
        });

        panelApelido.setBorder(javax.swing.BorderFactory.createTitledBorder("Apelido"));
        textApelido.setText("Jogador");

        org.jdesktop.layout.GroupLayout panelApelidoLayout = new org.jdesktop.layout.GroupLayout(panelApelido);
        panelApelido.setLayout(panelApelidoLayout);
        panelApelidoLayout.setHorizontalGroup(
            panelApelidoLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(panelApelidoLayout.createSequentialGroup()
                .addContainerGap()
                .add(textApelido, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 160, Short.MAX_VALUE)
                .addContainerGap())
        );
        panelApelidoLayout.setVerticalGroup(
            panelApelidoLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(panelApelidoLayout.createSequentialGroup()
                .add(textApelido, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(13, Short.MAX_VALUE))
        );

        panelListaServidores.setBorder(javax.swing.BorderFactory.createTitledBorder("Servidores"));
        scrollPaneServidores.setViewportView(listServidores);

        org.jdesktop.layout.GroupLayout panelListaServidoresLayout = new org.jdesktop.layout.GroupLayout(panelListaServidores);
        panelListaServidores.setLayout(panelListaServidoresLayout);
        panelListaServidoresLayout.setHorizontalGroup(
            panelListaServidoresLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(panelListaServidoresLayout.createSequentialGroup()
                .addContainerGap()
                .add(scrollPaneServidores, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 213, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panelListaServidoresLayout.setVerticalGroup(
            panelListaServidoresLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(panelListaServidoresLayout.createSequentialGroup()
                .add(scrollPaneServidores, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE)
                .addContainerGap())
        );

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(panelListaServidores, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                    .add(panelApelido, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(buttonConectar))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(panelListaServidores, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(layout.createSequentialGroup()
                        .add(panelApelido, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 243, Short.MAX_VALUE)
                        .add(buttonConectar)))
                .addContainerGap())
        );
        pack();
    }// </editor-fold>//GEN-END:initComponents
    
    private void buttonConectarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonConectarActionPerformed
		
	if (listServidores.getSelectedIndex() == -1) {
	    JOptionPane.showMessageDialog(this,
		    "Selecione um servidor da lista.",
		    "Servidor não especificado",
		    JOptionPane.ERROR_MESSAGE);
	}
	else if (textApelido.getText().equals("")) {
	    JOptionPane.showMessageDialog(this,
		    "Entre com um apelido para jogar.",
		    "Apelido não especificado",
		    JOptionPane.ERROR_MESSAGE);	    
	}
	else {
	    /* conecta-se ao servidor escolhido */
	    Servidor servidor = conexaoServidor.get(listServidores.getSelectedIndex());
	    RespostaConexao resposta = servidor.conectar(textApelido.getText());
	    
	    /* Trata erros de conexao */
	    if (resposta == null) {
		JOptionPane.showMessageDialog(this,
		    "Não foi possivel encontrar o servidor, ou ele não aceitou sua conexao, tente outro servidor.",
		    "Não foi possivel se conectar",
		    JOptionPane.WARNING_MESSAGE);
	    }
	    else if (resposta.getResposta() == RespostaConexao.LIMITE_JOGADORES) {
		JOptionPane.showMessageDialog(this,
		    "O sevidor não pode aceitar mais jogadores porque está no seu limite, tente mais tarde.",
		    "Não foi possivel se conectar",
		    JOptionPane.WARNING_MESSAGE);	  
	    }
	    else if (resposta.getResposta() == RespostaConexao.NOME_CONFLITANTE) {
		JOptionPane.showMessageDialog(this,
		    "O seu apelido, " + textApelido.getText() + 
			", ja esta sendo usado por outra pessoa no servidor, tente outro.",
		    "Não foi possivel se conectar",
		    JOptionPane.WARNING_MESSAGE);	  
	    }
	    else {
		/**
		 * Conexao bem sucedida
		 */
		Main.jogador = new Jogador(textApelido.getText(), resposta.getIdJogador());		
		Main.guiSala = new GUISala(servidor.getEndereco(), resposta.getPorta());		
		Main.guiSala.setVisible(true);
		this.setVisible(false);
	    }
	}
    }//GEN-LAST:event_buttonConectarActionPerformed
    
    
    // Declaração de variáveis - não modifique//GEN-BEGIN:variables
    private javax.swing.JButton buttonConectar;
    private javax.swing.JList listServidores;
    private javax.swing.JPanel panelApelido;
    private javax.swing.JPanel panelListaServidores;
    private javax.swing.JScrollPane scrollPaneServidores;
    private javax.swing.JTextField textApelido;
    // Fim da declaração de variáveis//GEN-END:variables
    
}
